home *** CD-ROM | disk | FTP | other *** search
- /*
- File: TextensionIOSuite.h
-
- Contains: xxx put contents here xxx
-
- Written by: Essam Zaky
-
- Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <2> 1/4/94 EZ clean up
- <1> 1/4/94 EZ first checked in
-
- */
-
- #ifndef _TextensionIOSuite_
- #define _TextensionIOSuite_
-
- #ifndef _ToolBoxDump_
- #include "ToolBoxDump.h"
- #endif
-
- #ifndef _TextensionCommon_
- #include "TextensionCommon.h"
- #endif
-
- #ifndef _Array_
- #include "Array.h"
- #endif
-
- #ifndef _Streams_
- #include "Streams.h"
- #endif
-
- #ifndef _AttrObject_
- #include "AttrObject.h"
- #endif
-
- #ifndef _ObjectsRanges_
- #include "ObjectsRanges.h"
- #endif
-
- #ifndef _Formatter_
- #include "Formatter.h"
- #endif
-
-
- //***************************************************************************************************
-
-
- const short kMaxRegisteredObjects = 6;
-
- class CRegisteredObjects : private SingleObject {
- public :
- inline void IRegisteredObjects() {fCount = 0;}
-
- void Free();
-
- inline short GetCountObjects() const {return fCount;}
-
- CAttrObject* GetIndObject(short index) const;
-
- void Add(CAttrObject* theObject);
-
- CAttrObject* Search(ClassId objClassId);
-
- private:
- short fCount;
- CAttrObject* fTable[kMaxRegisteredObjects];
- };
-
- extern CRegisteredObjects gRegisteredRuns;
-
- #ifdef txtnRulers
- extern CRegisteredObjects gRegisteredRulers;
- #endif
-
- extern uchar gGraphicsRunAssocChar;
- //************************************************************************************************
-
- typedef uchar TIOFlags;
-
- const TIOFlags kNoIOFlags = 0;
-
- const TIOFlags kIOText = 1;
- const TIOFlags kIORuns = 2;
-
- #ifdef txtnRulers
- const TIOFlags kIORulers = 4;
- #endif
-
- #ifdef txtnRulers
- const TIOFlags kIOTypesMask = kIOText+kIORuns+kIORulers;
-
- const TIOFlags kIOAll = kIOText+kIORuns+kIORulers;
- #else
- const TIOFlags kIOTypesMask = kIOText+kIORuns;
-
- const TIOFlags kIOAll = kIOText+kIORuns;
- #endif
- //***************************************************************************************************
-
- //constants for descendents
- const ulong kTextIOSuiteType = 'TEXT';
- const ulong kRunsIOSuiteType = 'runs';
-
- #ifdef txtnRulers
- const ulong kRulersIOSuiteType = 'rlrs';
- #endif
-
- const long kLocalObjectIOSuiteSize = sizeof(long) + sizeof(CAttrObject*); //range len + the obj ref
- //***************************************************************************************************
-
- struct TDataHeader {
- ulong dataType;
- long dataSize;
- };
- //***************************************************************************************************
-
- class CTextensionIOSuite : public HandleObject {
- public:
- CTextensionIOSuite();
-
- OSErr ITextensionIOSuite(char local = true, CStream* stream = nil);
- virtual void Free();
-
- static CAttrObject* GetDefaultObject(ulong ioSuiteType);
-
- #ifdef txtnRulers
- OSErr Output(long offset, long len
- , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars
- , TIOFlags flags = kIOAll);
-
- OSErr Input(long offset, long len
- , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars, CFormatter* formatter
- , TIOFlags* ioFlags, long* charsCount);
- #else
- OSErr Output(long offset, long len
- , CObjectsRanges* runs, CArray* chars
- , TIOFlags flags = kIOAll);
-
- OSErr Input(long offset, long len
- , CObjectsRanges* runs, CArray* chars, CFormatter* formatter
- , TIOFlags* ioFlags, long* charsCount);
- #endif
-
- void Empty();
-
- Boolean IsEmpty();
-
- protected:
- CStream* fStream;
-
- OSErr PutObjectRange(CAttrObject* theObj, long rangeLen);
-
- OSErr GetObjectRange(ulong ioSuiteType, CAttrObject** theObj, long* rangeLen);
-
- OSErr SearchIOSuiteType(ulong ioSuiteType, TDataHeader* header, Boolean fromStart = true);
-
- OSErr NewIOSuiteType(ulong ioSuiteType, long dataSize);
-
- OSErr PutTextIOSuite(void* textBuffer, long textSize);
-
- private:
- char fLocal;
- char fExternalStream;
-
- OSErr OutputObjects(long offset, long len, CObjectsRanges* objRanges, ulong ioSuiteType);
-
- OSErr GetObjectsRanges(const TDataHeader* objectsHeader, CObjectsRanges** objectsRanges);
-
- void FreeIOSuiteObjects(const TDataHeader* header);
- };
- //***************************************************************************************************
-
- class CTextensionScrap : public CTextensionIOSuite {
- public:
- CTextensionScrap();
-
- OSErr ITextensionScrap(CStream* stream = nil);
-
- //•override
- #ifdef txtnRulers
- virtual OSErr Output(long offset, long len
- , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars
- , TIOFlags flags = kIOAll);
- #else
- virtual OSErr Output(long offset, long len
- , CObjectsRanges* runs, CArray* chars
- , TIOFlags flags = kIOAll);
- #endif
-
- //•own
- virtual OSErr ConvertToSystemScrap(TIOFlags* flags); //may return "noTypeErr"
-
- virtual OSErr ConvertFromSystemScrap(TIOFlags* flags); //may return "noTypeErr"
-
- Boolean CanPaste();
-
- protected:
- //•own
- OSErr PutSysScrap(long length, ResType theType, Ptr source);
- //calls "PutScrap" and updates "fSysScrapCount"
-
- private:
- short fScrapCount;
- short fSysScrapCount;
-
- Boolean fCanPaste;
- short fCanPasteScrapCount;
-
- void SetSysScrapCount();
- Boolean IsNewerThanSysScrap();
-
- CAttrObject* GetSystemScrapIOObject(long* scrapSize);
- OSErr SystemScrap2Object(CAttrObject** theObj);
- };
- //***************************************************************************************************
-
- #endif
-